﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Threading;
using DevExpress.XtraReports.UI;
using DevExpress.XtraEditors;
using DevExpress.XtraSplashScreen;
using prjKQXS_UI.View;
using prjKQXS_Report;
using prjKQXS_DLL;
using prjKQXS_DLL.Doanh_thu;

namespace prjKQXS_UI.Doanh_thu
{
    public partial class frmTongHopDT : DevExpress.XtraEditors.XtraForm
    {
        #region VAR ==============================================================================
        /// <summary>
        /// Giá trị biến này tự động được gán là -1 hoặc cán bộ id tương ứng khi chọn cán bộ từ lueCanBo
        /// </summary>
        int DMCanBoID;

        /// <summary>
        /// TenCB (Tên cán bộ) tự động được gán khi chọn cán bộ từ lueCanBo
        /// </summary>
        string TenCB;

        /// <summary>
        /// Biến này tự động được gán là '%' hoặc mã đơn vị tương ứng khi chọn cán bộ từ lueDonVi
        /// </summary>
        char MaDV;

        /// <summary>
        /// TenDV (Tên đơn vị) tự động được gán khi chọn cán bộ từ lueDonVi
        /// </summary>
        string TenDV;

        string isCap = "";
        clsDoanhThu cls = new clsDoanhThu();
        #endregion VAR ===========================================================================


        #region form EVENT =======================================================================
        public frmTongHopDT()
        {
            InitializeComponent();
            ucDonVi1.lueDonVi.EditValueChanged += new EventHandler(lueDonVi_EditValueChanged);
            ucCanBo1.lueCanBo.EditValueChanged += new EventHandler(lueCanBo_EditValueChanged);

            cls.OnAction += new clsDoanhThu.OnActionHandler(cls_OnAction);
            cls.OnError += new clsDoanhThu.OnErrorHandler(cls_OnError);
        }

        private void frmTongHopDT_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            deTu.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            deDen.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
            loadLueDonVi();
        }
        #endregion form EVENT ====================================================================


        #region Control ==========================================================================
        private void sbtnChapnhan_Click(object sender, EventArgs e)
        {
            if (deTu.Value.Date > deDen.Value.Date)
                XtraMessageBox.Show("TỪ NGÀY không được lớn hơn ĐẾN NGÀY. Vui lòng chọn lại.", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            else
            {
                in_baocao();

                if (MaDV == '%') isCap = "CTY";
                else isCap = DMCanBoID == -1 ? "QH" : "CB";
            }
        }

        private void sbtnHoaHong2_Click(object sender, EventArgs e)
        {
            SplashScreenManager.ShowForm(typeof(frmWaitForm));

            rptMauHH01y rpt = new rptMauHH01y();
            rpt.OnLoadComplete += new rptMauHH01y.OnLoadCompleteHandler(rpt_OnLoadComplete);

            rpt.Parameters["pMaDV"].Value = MaDV;
            rpt.Parameters["pTenDV"].Value = TenDV;
            rpt.Parameters["pTuNgay"].Value = deTu.Value.Date;
            rpt.Parameters["pDenNgay"].Value = deDen.Value.Date;
            rpt.Parameters["pThiTran"].Value = chkDaiLyThiTran.Checked;
            
            
            GroupHeaderBand ghBand = (GroupHeaderBand)rpt.Bands["GroupHeader1"];
            ghBand.GroupFields["MaDV"].FieldName = "MST";
            ghBand.GroupFields.Add(new GroupField("TenDaiLy")); //Chèn thêm một field này để tránh báo cáo group các record có MST = null lại với nhau
            rpt.Bands[BandKind.Detail].Visible = false;
            rpt.ShowRibbonPreviewDialog();
        }

        private void lueDonVi_EditValueChanged(object sender, EventArgs e)
        {
            string madv = ucDonVi1.lueDonVi.GetColumnValue("Ma_DT").ToString().Trim();
            MaDV = madv == "TC" ? '%' : Convert.ToChar(madv);
            TenDV = ucDonVi1.lueDonVi.GetColumnValue("Ten_DT").ToString().Trim();

            loadLueCanBo();
            ucCanBo1.lueCanBo.Enabled = !(MaDV == '%');
            if (ucCanBo1.lueCanBo.ItemIndex == 0) lueCanBo_EditValueChanged(null, null);
            else ucCanBo1.lueCanBo.ItemIndex = 0;
        }

        private void lueCanBo_EditValueChanged(object sender, EventArgs e)
        {
            DMCanBoID = (int)ucCanBo1.lueCanBo.GetColumnValue("ID");
            TenCB = ucCanBo1.lueCanBo.GetColumnValue("Ten_DT").ToString().Trim();

            sbtnHoaHong2.Enabled = DMCanBoID == -1;
            chkDaiLyThiTran.Enabled = DMCanBoID == -1;
        }

        private void chkDaiLyThiTran_CheckedChanged(object sender, EventArgs e)
        {
            chkKhongDuDoanhThu.Enabled = chkDaiLyThiTran.CheckState == CheckState.Checked;
        }

        private void chkDaiLyThiTran_EnabledChanged(object sender, EventArgs e)
        {
            chkKhongDuDoanhThu.Enabled =
                chkDaiLyThiTran.CheckState == CheckState.Checked
                && chkDaiLyThiTran.Enabled;
        }
        #endregion Control =======================================================================


        #region Sub and Func =====================================================================
        #region cls event --------------------------------------------
        private void cls_OnAction(SqlException e)
        {
            cls_OnError(e);
        }

        private void cls_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion ---------------------------------------------------

        private void loadLueDonVi()
        {
            ucDonVi1.lueDonVi.Properties.DataSource = clsCommon.load_lueDonVi();

            if (BienTc.isQuanHuyen || BienTc.isThanhPho || !clsCommon.hasPermission(BienTc.UserID, (int)BienTc.eFunction.L_DonVi))
            {
                ucDonVi1.lueDonVi.ItemIndex = ucDonVi1.lueDonVi.Properties.GetDataSourceRowIndex("Ma_DT", BienTc.ma_huyen == "" ? "TC" : BienTc.ma_huyen);
                if (BienTc.isQuanHuyen || BienTc.isThanhPho) ucDonVi1.lueDonVi.Properties.ReadOnly = true;
            }
            else ucDonVi1.lueDonVi.ItemIndex = 0;
        }

        private void loadLueCanBo()
        {
            ucCanBo1.lueCanBo.Properties.DataSource = clsCommon.load_lueCanBo(MaDV);
        }

        private void rptMauHH01x()
        {
            rptMauHH01x rpt = new rptMauHH01x();
            rpt.OnLoadComplete += new prjKQXS_Report.rptMauHH01x.OnLoadCompleteHandler(rpt_OnLoadComplete);
            rpt.xrlblDonVi.Text = MaDV == '%' ? "" : "PHÒNG XSKT " + TenDV.ToUpper();
            rpt.Parameters["pFormName"].Value = this.Name;
            rpt.Parameters["pCap"].Value = isCap;
            rpt.Parameters["pMaDV"].Value = MaDV;
            rpt.Parameters["pDMCanBoID"].Value = DMCanBoID;
            rpt.Parameters["pTenCB"].Value = TenCB;
            rpt.Parameters["pTuNgay"].Value = deTu.Value.Date;
            rpt.Parameters["pDenNgay"].Value = deDen.Value.Date;
            rpt.Parameters["pDaiLyThiTran"].Value = chkDaiLyThiTran.Enabled && chkDaiLyThiTran.Checked;
            rpt.Parameters["pKhongDuDoanhThu"].Value = chkKhongDuDoanhThu.Enabled && chkKhongDuDoanhThu.Checked;
            rpt.ShowRibbonPreviewDialog();
        }

        private void in_baocao()
        {
            SplashScreenManager.ShowForm(typeof(frmWaitForm));

            if (chkDaiLyThiTran.Enabled && chkDaiLyThiTran.Checked) rptMauHH01x();
            else
            {
                if (MaDV == '%')
                {
                    rptMauHH03x rpt = new rptMauHH03x();
                    rpt.OnLoadComplete += new rptMauHH03x.OnLoadCompleteHandler(rpt_OnLoadComplete);
                    rpt.Parameters["pFormName"].Value = this.Name;
                    rpt.Parameters["pTuNgay"].Value = deTu.Value.Date;
                    rpt.Parameters["pDenNgay"].Value = deDen.Value.Date;
                    rpt.Parameters["pMaDV"].Value = "%";
                    rpt.Parameters["pTenDV"].Value = TenDV;
                    rpt.ShowRibbonPreviewDialog();
                }
                else //if (MaDV != "TC")
                {
                    if (DMCanBoID == -1)
                    {
                        rptMauHH02x rpt = new rptMauHH02x();
                        rpt.OnLoadComplete += new rptMauHH02x.OnLoadCompleteHandler(rpt_OnLoadComplete);
                        rpt.Parameters["pFormName"].Value = this.Name;
                        rpt.Parameters["pTuNgay"].Value = deTu.Value.Date;
                        rpt.Parameters["pDenNgay"].Value = deDen.Value.Date;
                        rpt.Parameters["pMaDV"].Value = MaDV;
                        rpt.Parameters["pTenDV"].Value = TenDV;
                        rpt.ShowRibbonPreviewDialog();
                    }
                    else rptMauHH01x();
                }
            }
        }

        private void rpt_OnLoadComplete()
        {
            SplashScreenManager.CloseForm();
        }
        #endregion Sub and Func ==================================================================
    }
}